#!/usr/bin/python
# -*- coding: utf-8 -*-

"""
術數基礎 陰陽、五行、方向、天干、生肖、性別
"""

#TODO: list in enum

類別 太極(物件):
    """
    道生萬物
    """
    定義 __字串__(我):
        返回 我.名稱


類別 兩儀(太極):
    """
    陰、陽
    """
    定義 __初始化__(我, 名稱, 數字):
        我.名稱 = 名稱
        我.數字 = 數字

陰 = 兩儀(名稱 = "陰", 數字 = 0)
陽 = 兩儀(名稱 = "陽", 數字 = 1)


類別 性別(物件):
    定義 __初始化__(我, 名稱, 陰陽):
        我.名稱 = 名稱
        我.陰陽 = 陰陽

    定義 __字串__(我):
        返回 我.名稱 

男 = 性別("男", 陽)
女 = 性別("女", 陰)


類別 方向(物件):
    """
    東、西、南、北
    """
    定義 __初始化__(我, 名稱):
        我.名稱 = 名稱

    定義 __字串__(我):
        返回 我.名稱

東 = 方向("東")
西 = 方向("西")
南 = 方向("南")
北 = 方向("北")
中 = 方向("中")


類別 天干(物件):
    """
    天干參數
    """
    定義 __初始化__(我, 名稱, 陰陽):
        我.名稱 = 名稱
        我.陰陽 = 陰陽

    定義 __字串__(我):
        返回 我.名稱

甲 = 天干(名稱 = '甲', 陰陽 = 陽)
乙 = 天干(名稱 = '乙', 陰陽 = 陰)
丙 = 天干(名稱 = '丙', 陰陽 = 陽)
丁 = 天干(名稱 = '丁', 陰陽 = 陰)
戊 = 天干(名稱 = '戊', 陰陽 = 陽)
己 = 天干(名稱 = '己', 陰陽 = 陰)
庚 = 天干(名稱 = '庚', 陰陽 = 陽)
辛 = 天干(名稱 = '辛', 陰陽 = 陰)
壬 = 天干(名稱 = '壬', 陰陽 = 陽)
癸 = 天干(名稱 = '癸', 陰陽 = 陰)

天干表 = [甲, 乙, 丙, 丁, 戊, 己, 庚, 辛, 壬, 癸]


類別 地支(物件):
    """
    地支參數
    """
    定義 __初始化__(我, 名稱, 陰陽, 時間):
        我.名稱 = 名稱
        我.陰陽 = 陰陽
        我.時間 = 時間

    定義 __字串__(我):
        返回 我.名稱

子 = 地支(名稱 = '子', 陰陽 = 陽, 時間=(23, 1))
丑 = 地支(名稱 = '丑', 陰陽 = 陰, 時間=(1, 3))
寅 = 地支(名稱 = '寅', 陰陽 = 陽, 時間=(3, 5))
卯 = 地支(名稱 = '卯', 陰陽 = 陰, 時間=(5, 7))
辰 = 地支(名稱 = '辰', 陰陽 = 陽, 時間=(7, 9))
巳 = 地支(名稱 = '巳', 陰陽 = 陰, 時間=(9, 11))
午 = 地支(名稱 = '午', 陰陽 = 陽, 時間=(11, 13))
未 = 地支(名稱 = '未', 陰陽 = 陰, 時間=(13, 15))
申 = 地支(名稱 = '申', 陰陽 = 陽, 時間=(15, 17))
酉 = 地支(名稱 = '酉', 陰陽 = 陰, 時間=(17, 19))
戌 = 地支(名稱 = '戌', 陰陽 = 陽, 時間=(19, 21))
亥 = 地支(名稱 = '亥', 陰陽 = 陰, 時間=(21, 23))

地支表 = [子, 丑, 寅, 卯, 辰, 巳, 午, 未, 申, 酉, 戌, 亥]

# 地支對應方向
子.方向 = 北
丑.方向 = 北
寅.方向 = 北
卯.方向 = 西
辰.方向 = 西
巳.方向 = 西
午.方向 = 南
未.方向 = 南
申.方向 = 南
酉.方向 = 東
戌.方向 = 東
亥.方向 = 東


類別 生肖(物件):
    """
    十二生肖
    """
    定義 __初始化__(我, 名稱, 地支):
        我.名稱 = 名稱
        我.地支 = 地支

    定義 __字串__(我):
        返回 我.名稱

鼠 = 生肖("鼠", 子)
牛 = 生肖("牛", 丑)
虎 = 生肖("虎", 寅)
兔 = 生肖("兔", 卯)
龍 = 生肖("龍", 辰)
蛇 = 生肖("蛇", 巳)
馬 = 生肖("馬", 午)
羊 = 生肖("羊", 未)
猴 = 生肖("猴", 申)
雞 = 生肖("雞", 酉)
狗 = 生肖("狗", 戌)
豬 = 生肖("豬", 亥)

# 地支對應陰陽
# 鼠.地支.陰陽

# 地支對應生肖
子.生肖 = 鼠
丑.生肖 = 牛
寅.生肖 = 虎
卯.生肖 = 兔
辰.生肖 = 龍
巳.生肖 = 蛇
午.生肖 = 馬
未.生肖 = 羊
申.生肖 = 猴
酉.生肖 = 雞
戌.生肖 = 狗
亥.生肖 = 豬


類別 五行(物件):
    """
    《韻會》五行，運于天地閒，未嘗停息，故名。

       火
     / |
    木 土->金
     \    /
       水
    
    依序相生、隔行相剋、逆序相洩、剋過相乘、剋逆相悔
    
    假設五行系統中有100％的能量，
    靜止狀態下，五行間毫無交集，沒有生機。
    套用相生，相剋，相洩，五行系統的能量便會在五行之間轉移。
    
    五行之於斗數
    http://hk.myblog.yahoo.com/lawrencioy/article?mid=188
    """
    定義 __初始化__(我, 名稱):
        我.名稱 = 名稱
        我.相生 = 空
        我.相剋 = 空
        我.天干 = 空
        我.地支 = 空
        我.局數 = 空

    定義 __字串__(我):
        返回 我.名稱

木 = 五行(名稱 = '木')
火 = 五行(名稱 = '火')
土 = 五行(名稱 = '土')
金 = 五行(名稱 = '金')
水 = 五行(名稱 = '水')

# 五行相生關係
木.相生 = 火
火.相生 = 土
土.相生 = 金
金.相生 = 水
水.相生 = 木

# 五行相洩關係 (相生的相反)
木.相洩 = 水
火.相洩 = 木
土.相洩 = 火
金.相洩 = 土
水.相洩 = 金

# 五行相剋關係
木.相剋 = 土
土.相剋 = 水
水.相剋 = 火
火.相剋 = 金
金.相剋 = 木

# 相乘關係同相剋關係 <- 相剋過度
木.相乘 = 土
土.相乘 = 水
水.相乘 = 火
火.相乘 = 金
金.相乘 = 木

# 五行相悔關係 (相剋的相反 <- 被反剋)
木.相悔 = 金
土.相悔 = 木
水.相悔 = 土
火.相悔 = 水
金.相悔 = 火

# 方向對應五行
東.五行 = 木
南.五行 = 火
中.五行 = 土
西.五行 = 金
北.五行 = 水


# 五行對應方向
木.方向 = 東
火.方向 = 南
土.方向 = 中
金.方向 = 西
水.方向 = 北

# 五行對應天干
木.天干 = 甲, 乙
火.天干 = 丙, 丁
土.天干 = 戊, 己
金.天干 = 庚, 辛
水.天干 = 壬, 癸

# 天干對應五行
"""
       火
     / |
    木 土->金
     \    /
       水
"""
甲.五行 = 木
乙.五行 = 木
丙.五行 = 火
丁.五行 = 火
戊.五行 = 土
己.五行 = 土
庚.五行 = 金
辛.五行 = 金
壬.五行 = 水
癸.五行 = 水

# 五行對應地支
木.地支 = 寅, 卯
火.地支 = 巳, 午 
土.地支 = 辰, 戌, 丑, 未
金.地支 = 申, 酉
水.地支 = 子, 亥

# 地支對應五行
"""
   巳 午
卯 辰 未 申
寅 丑 戌 酉
   子 亥
"""
寅.五行 = 木
卯.五行 = 木
巳.五行 = 火
午.五行 = 火
辰.五行 = 土
戌.五行 = 土
丑.五行 = 土
未.五行 = 土
申.五行 = 金
酉.五行 = 金
子.五行 = 水
亥.五行 = 水

# 五行對應季節
木.季節 = "春"
火.季節 = "夏"
土.季節 = "四季末"
金.季節 = "秋"
水.季節 = "東"

# 季節與五行強弱的統計表，旺、相、休、囚、死
# 當季 - 旺, 生 - 相, 逆生 - 休, 剋 - 死, 逆剋 - 囚
# 0, +1, -1, +2, -2

# 五行對應顏色
木.顏色 = "青"
火.顏色 = "紅"
土.顏色 = "黃"
金.顏色 = "白"
水.顏色 = "黑"
